package com.woniu.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.entity.Bank;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author fzn
 * @since 2022-08-28
 *
 * 为了方便理解，暂时不适用mybatis plus自带的方法
 */
public interface BankMapper extends BaseMapper<Bank> {


    /**
     * 增加一个银行账户
     * @param bankAccount 银行账户，不能为空；银行金额不能小于0
     * 需要在service处做判断
     */
    @Insert("insert into bank(left_money) values(#{leftMoney}) ")
    void insertBank(Bank bankAccount);


    /**
     * 更新银行账户
     * @param bankAccount 银行账户，不能为空；银行金额不能小于0
     * 需要在service处做判断
     */
    @Update("update bank set left_money=#{leftMoney} where bank_id=#{bankId}")
    void updateBank(Bank bankAccount);


    /**
     * 查询
     * @param bankAccount 银行账户不能为空；id大于0
     * @return 返回一个账户
     * 需要在service处做判断
     */
    @Select("select * from bank where bank_id=#{bankId}")
    @Results({
            @Result(column="bank_id",property = "bankId"),
            @Result(column="left_money",property = "leftMoney"),
    })
    Bank selectOneBank(Bank bankAccount);

    /**
     * 查询，根据账户id查询
     * @param bankId
     * @return
     */
    @Select("select * from bank where bank_id=#{bankId}")
    @Results(id="bankMap",value={
            @Result(column="bank_id",property = "bankId"),
            @Result(column="left_money",property = "leftMoney"),
    })
    Bank selectBankById(Integer bankId);
    /**
     * 删除
     * @param bank 银行账户，不能为空；id大于0
     * 需要在service处做判断
     */
    @Delete("delete from bank where bank_id=#{bankId}")
    void deleteBank(Bank bank);

    /**
     * ${ew.customSqlSegment} 的意思是，由wrapper产生的sql语句放在哪个位置
     * @param page
     * @param wrapper 包装好的QueryWapper
     * @return 返回一个Page，继承了IPage
     *
     * 切记，这里的Page page必须放第一个参数，否则gg
     */
    @Select("select * from bank ${ew.customSqlSegment}")
    @ResultMap("bankMap")
    Page<Bank> getByAnyBankWithPage(Page<Bank> page, @Param(Constants.WRAPPER) Wrapper wrapper);


    @Select("select * from bank ${ew.customSqlSegment}")
    @ResultMap("bankMap")
    List<Bank> getByCondition(@Param(Constants.WRAPPER) Wrapper wrapper);
}
